package com.sheng.leetcode.year2022.swordfingeroffer.day05;

import org.junit.Test;

import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;

/**
 * @author liusheng
 * @date 2022/09/05
 *
 * 剑指 Offer 50. 第一个只出现一次的字符
 *
 * 在字符串 s 中找出第一个只出现一次的字符。如果没有，返回一个单空格。 s 只包含小写字母。
 *
 * 示例 1:
 * 输入：s = "abaccdeff"
 * 输出：'b'
 *
 * 示例 2:
 * 输入：s = ""
 * 输出：' '
 *
 * 限制：
 *
 * 0 <= s 的长度 <= 50000
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode.cn/problems/di-yi-ge-zhi-chu-xian-yi-ci-de-zi-fu-lcof
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
public class Sword0050 {

    @Test
    public void test01() {
        String s = "abaccdeff";
        System.out.println(new Solution50().firstUniqChar(s));
    }
}
class Solution50 {
    public char firstUniqChar(String s) {
        // 41ms
        Map<Character, Integer> map = new LinkedHashMap<>();
        for (int i = 0; i < s.length(); i++) {
            map.put(s.charAt(i), map.getOrDefault(s.charAt(i), 0) + 1);
        }
        for (Map.Entry<Character, Integer> entry : map.entrySet()) {
            if (entry.getValue() == 1) {
                return entry.getKey();
            }
        }
        return ' ';
    }
}

//26ms
//class Solution50 {
//    public char firstUniqChar(String s) {
//        Map<Character, Integer> frequency = new HashMap<Character, Integer>();
//        for (int i = 0; i < s.length(); ++i) {
//            char ch = s.charAt(i);
//            frequency.put(ch, frequency.getOrDefault(ch, 0) + 1);
//        }
//        for (int i = 0; i < s.length(); ++i) {
//            if (frequency.get(s.charAt(i)) == 1) {
//                return s.charAt(i);
//            }
//        }
//        return ' ';
//    }
//}
//
//作者：LeetCode-Solution
//链接：https://leetcode.cn/problems/di-yi-ge-zhi-chu-xian-yi-ci-de-zi-fu-lcof/solution/di-yi-ge-zhi-chu-xian-yi-ci-de-zi-fu-by-3zqv5/
//来源：力扣（LeetCode）
//著作权归作者所有。商业转载请联系作者获得授权，非商业转载请注明出处。
